package cn.iocoder.yudao.module.book.service.plans;

import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;
import cn.iocoder.yudao.module.book.controller.admin.plans.vo.*;
import cn.iocoder.yudao.module.book.dal.dataobject.plans.PlansDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.book.dal.mysql.plans.PlansMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.book.enums.ErrorCodeConstants.*;

/**
 * 阅读计划 Service 实现类
 *
 * @author xi
 */
@Service
@Validated
public class PlansServiceImpl implements PlansService {

    @Resource
    private PlansMapper plansMapper;

    @Override
    public Integer createPlans(PlansSaveReqVO createReqVO) {
        // 插入
        PlansDO plans = BeanUtils.toBean(createReqVO, PlansDO.class);
        plansMapper.insert(plans);
        // 返回
        return plans.getPlanId();
    }

    @Override
    public void updatePlans(PlansSaveReqVO updateReqVO) {
        // 校验存在
        validatePlansExists(updateReqVO.getPlanId());
        // 更新
        PlansDO updateObj = BeanUtils.toBean(updateReqVO, PlansDO.class);
        plansMapper.updateById(updateObj);
    }

    @Override
    public void deletePlans(Integer id) {
        // 校验存在
        validatePlansExists(id);
        // 删除
        plansMapper.deleteById(id);
    }

    private void validatePlansExists(Integer id) {
        if (plansMapper.selectById(id) == null) {
            throw exception(PLANS_NOT_EXISTS);
        }
    }

    @Override
    public PlansDO getPlans(Integer id) {
        return plansMapper.selectById(id);
    }

    @Override
    public PageResult<PlansDO> getPlansPage(PlansPageReqVO pageReqVO) {
        return plansMapper.selectPage(pageReqVO);
    }

}